import java.util.Scanner;

public class day230331 {
    // 最近公共祖先
    // 3. 因为是一个满二叉树, 并且按顺序排列
    // 像优先级队列一样, i 的 孩子为 i * 2 与 i * 2 + 1
    // i 的 父节点为 i / 2
    // 两个结点下标 大的除以2, 直到相等
    public static int getLCA2(int a, int b) {
        while (a != b) {
            if (a > b) {
                a /= 2;
            } else {
                b /= 2;
            }
        }
        return a;
    }

    // 2. 递归, 用两个存放栈, 两个目标结点到根结点的 路径结点
    // 把栈大的弹出一些结点, 让两个栈一样大 (到同一层)
    // 然后比较两个栈, 不相等都弹出, 相等就是找到了最近公共祖先

    // 1. 递归遍历
    // 找一个结点的左右子树,有没有目标结点
    // 如果左右子树都有目标结点, 改结点就是最近公共祖先
    // 如果只在左边找到, 右边没找到, 说明最近公共祖先在左边
    // 右边同理
    public static int getLCA(int a, int b) {
        return func(1, a, b);
    }

    public static int func(int root, int a, int b) {
        // 该题为无穷大的满二叉树, 按顺序存放
        // root 大于 a 和 b 就不用再找了
        if (root > a && root > b) {
            return 0;
        }

        // 找到目标结点, 返回
        if (root == a || root == b) {
            return root;
        }

        // 找左右子树
        int left = func(root * 2, a, b);
        int right = func(root * 2 + 1, a, b);

        if (left != 0 && right != 0) {
            // 左右子树都找到了, 该节点是最近公共祖先
            return root;
        } else if (left != 0) {
            // 公共祖先在 左边, 返回左边的结果
            return left;
        } else if (right != 0) {
            // 公共祖先在 右边, 返回左边的结果
            return right;
        }

        return 0;
    }

    public static void main1(String[] args) {
        System.out.println(getLCA2(4,5));
    }

    // 求最大连续bit数
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int max = 0;
        while (n != 0) {
            int count = 0;
            while (n != 0 && (n & 1) == 1) {
                count++;
                n = n >> 1;
            }
            n = n >> 1;
            max = Math.max(count, max);
        }
        System.out.println(max);
    }
}
